package API;

public class TestString {

    public static void main(String[] args) {
        //字符串类型底层维护的是char[]，存在堆中。
        /*一个类的对象通过什么方式创建，取决于这个类定义了那些构造方法
        * 如果刚接触一个类，不清楚如何创建这个类的对象，可以查看API手册中这个对象的构造函数
        * 查API手册得知：String有一个构造方法String(char[] values)*/
        char[] value = {'a','b','c'};
        String s1 = new String(value);
        String s11 = new String(value);
/*String类底层重写了Object的toString，所以可以直接打印字符串的内容
* 这种方式有一个高效的效果，因为数据存在堆中的常量池中
* 如果是第一次创建，会在堆中常量池创建次字符串对象
* 再次创建相同内容时，就不会再新建了，避免重复创建，浪费效率*/
        //String对象的高效创建方式，在常量池中借用。
        String s2 = "abc";
        String s22 = "abc";
        String s222 = "ccc";

        System.out.println(s1 == s2 );//false
        System.out.println(s1 == s11 );//false
        System.out.println(s2 == s22 );//true
        System.out.println(s2 == s222 );//false

/*String重写了equals比较的是内容*/
        System.out.println(s1.equals(s2) );//true
        System.out.println(s1.equals(s11) );//true
        System.out.println(s1.equals(s222) );//false


    }
}
